package com.tools.service.workflow;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tools.pojo.workflow.bo.FlowNode;
import com.tools.pojo.workflow.po.FlowDefinition;
import com.tools.pojo.workflow.po.FlowTransition;

import java.util.List;
import java.util.Map;

public interface FlowDefinitionService extends IService<FlowDefinition> {
    /**
     * 根据流程代码获取流程定义
     * @param flowCode 流程代码
     * @return 流程定义
     */
    FlowDefinition getByCode(String flowCode);
    
    /**
     * 根据流程代码和版本获取流程定义
     * @param flowCode 流程代码
     * @param version 版本号
     * @return 流程定义
     */
    FlowDefinition getByCodeAndVersion(String flowCode, Integer version);
    
    /**
     * 解析流程配置JSON字符串
     * @param configJson 流程配置JSON字符串
     * @return 解析后的流程配置列表
     */
    List<Map<String, Object>> parseFlowConfig(String configJson);
    
    /**
     * 获取所有激活的流程定义
     * @return 所有激活的流程定义列表
     */
    List<FlowDefinition> getActiveFlows();
    
    /**
     * 创建新版本流程定义
     * @param flowDefinition 流程定义
     * @param nodes 节点列表
     * @param transitions 连线列表
     * @return 创建的流程定义
     */
    FlowDefinition createNewVersion(FlowDefinition flowDefinition, List<FlowNode> nodes, List<FlowTransition> transitions);
    
    /**
     * 发布流程定义
     * @param definitionId 流程定义ID
     * @return 是否成功
     */
    boolean publishDefinition(Long definitionId);
    
    /**
     * 停用流程定义
     * @param definitionId 流程定义ID
     * @return 是否成功
     */
    boolean deactivateDefinition(Long definitionId);
    
    /**
     * 获取流程定义的版本历史
     * @param flowCode 流程代码
     * @return 版本历史列表
     */
    List<FlowDefinition> getVersionHistory(String flowCode);
    
    /**
     * 同步流程定义变更到缓存
     * @param definitionId 流程定义ID
     */
    void syncDefinitionToCache(Long definitionId);

}
